/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package negocios;

import acceso_datos.RegistroincidenteDB;
import acceso_datos.TipoIncidenteDB;
import datos.RegistroIncidente;
import exceptions.AlfanumericoException;
import exceptions.Alfanumero;
import exceptions.EmergenciaInicialException;
import exceptions.RegistroIncidenteException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author miguesaca
 */
public class GestorRegistroIncidente {
    
    private RegistroIncidente registroIncidente;
    private Map<Integer, RegistroIncidente> listaRegistroIncidente = new HashMap<Integer, RegistroIncidente>();
    private Alfanumero alfaNumero;
    ///momentaneamente hasta la impltcion de la base
    private int clave = 0;
    public GestorRegistroIncidente() {
        alfaNumero = new Alfanumero();
    }

    public RegistroIncidente getRegistroIncidente() {
        return registroIncidente;
    }

    public void setRegistroIncidente(RegistroIncidente registroIncidente) {
        this.registroIncidente = registroIncidente;
    }

    public void cargarDatos() throws SQLException {
        //listaRegistroIncidente.put(registroIncidente.getClave(), registroIncidente);
        RegistroincidenteDB rdb=new RegistroincidenteDB();
        listaRegistroIncidente=rdb.listar();
    }

    public void insertar(RegistroIncidente registroIncidente) throws RegistroIncidenteException, AlfanumericoException, SQLException {
        
        
        alfaNumero.vacio(registroIncidente.getTipoIncidente().getDescripcion());
        alfaNumero.vacio(registroIncidente.getObservacion());
        if (listaRegistroIncidente.containsKey(registroIncidente.getClave())) {
            throw new RegistroIncidenteException("Registro de incidentes ya existe");
        }
        
        TipoIncidenteDB tidb=new TipoIncidenteDB();      
        registroIncidente.getTipoIncidente().setId(tidb.getMaxId()+1);
        tidb.grabar(registroIncidente.getTipoIncidente());
        
        
        RegistroincidenteDB ridb=new RegistroincidenteDB();       
        
        clave=ridb.indiceFinal()+1;
        registroIncidente.setClave(clave);
        this.registroIncidente = registroIncidente;        
        
        
        ridb.grabar(registroIncidente);
        listaRegistroIncidente.put(registroIncidente.getClave(), registroIncidente);
    }

    public void modificar(RegistroIncidente registroIncidente) throws RegistroIncidenteException {
        buscar(registroIncidente.getClave());
        this.registroIncidente = registroIncidente;
        listaRegistroIncidente.put(registroIncidente.getClave(), registroIncidente);
    }

    public RegistroIncidente buscar(int clave) throws RegistroIncidenteException {
        if (!listaRegistroIncidente.containsKey(clave)) {
            throw new RegistroIncidenteException("Registro de incidente inExistente");
        }
        return listaRegistroIncidente.get(clave);
    }

    public void eliminar(int clave) throws RegistroIncidenteException {
        buscar(clave);
        listaRegistroIncidente.remove(clave);
    }

    public DefaultTableModel tablaModelo() {
        Object nameColumns[] = {"Clave","Coordinador","Emergencia"};
        DefaultTableModel miTableModel = new DefaultTableModel(nameColumns, 0);
        for (RegistroIncidente value : listaRegistroIncidente.values()) {
            Object nuevaFila[] = {value.getClave(),value.getCoordinador().getCedula(),value.getEmergencie().getRegistroLlamada().getId()};
            miTableModel.addRow(nuevaFila);
        }

        return miTableModel;
    }
}
